builder: Allow objects in gtk_builder_value_from_string_type()
authorBenjamin Otte <otte@redhat.com>
Mon, 25 Nov 2019 05:06:31 +0000 (06:06 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 3 Dec 2019 17:12:25 +0000 (18:12 +0100)
Instead of throwing an error, lookup objects with
gtk_builder_get_object().

gtk/gtkbuilder.c

index 1b39f30d0950685505a8a4fa77697fd56099e3f4..8f6935c69618455fbdb43b119a8405a179a8b4fd 100644 (file)
@@ -2167,7 +2167,31 @@ gtk_builder_value_from_string_type (GtkBuilder   *builder,
           ret = TRUE;
         }
       else
-        ret = FALSE;
+        {
+          GObject *object = g_hash_table_lookup (priv->objects, string);
+
+          if (object && g_value_type_compatible (G_OBJECT_TYPE (object), type))
+            {
+              g_value_set_object (value, object);
+            }
+          else if (object)
+            {
+              g_set_error (error,
+                           GTK_BUILDER_ERROR,
+                           GTK_BUILDER_ERROR_INVALID_VALUE,
+                           "Object named \"%s\" is of type \"%s\" which is not compatible with expected type \%s\"",
+                           string, G_OBJECT_TYPE_NAME (object), g_type_name (type));
+              ret = FALSE;
+            }
+          else
+            {
+              g_set_error (error,
+                           GTK_BUILDER_ERROR,
+                           GTK_BUILDER_ERROR_INVALID_VALUE,
+                           "No object named \"%s\"", string);
+              ret = FALSE;
+            }
+        }
       break;
     case G_TYPE_POINTER:
       if (G_VALUE_HOLDS (value, G_TYPE_GTYPE))